package cn.edu.wynu.d6_lambda;
/*
Lambda表达式：Lambda表达式是JDK8开始新增的一种语法形式;
作用:用于简化匿名内部类的代码写法

格式
(被重写方法的形参列表)->{
    被重写方法的方法体代码。
}
注意：Lambda表达式只能简化函数式接口的匿名内部类写法，不能简化非函数式接口的匿名内部类的写法

什么是函数式接口？
1、有且仅有一个抽象方法的接口。
2、注意:将来我们见到的大部分函数式接口，上面都可能会有一个@Functionalnterface的注解，有该注解
的接口就必定是函数式接口。
*/

public class LambdaTest1 {
    public static void main(String[] args) {
        // 认识Lambda表达式
//        Animal a = new Animal(){
//            @Override
//            public void run() {
//                System.out.println("狗跑的贼快~~");
//            }
//        };
//        a.run();

        // 注意：Lambda表达式并不是说能简化全部匿名内部类的写法，只能简化函数式接口的匿名内部类。
        //  错误的代码！
//        Animal a = () -> {
//            System.out.println("狗跑的贼快~~");
//        };
//        a.run();


        // 函数式接口：只有一个抽象方法的接口，叫做函数式接口
//         Swimming s = new Swimming(){
//             @Override
//             public void swim() {
//                 System.out.println("学生会游泳~~~~");
//             }
//         };
//         s.swim();

        Swimming s = () -> {
            System.out.println("学生会游泳~~~~");
        };
        s.swim();
    }
}
interface Swimming{
    void swim();
}

abstract class Animal{
    public abstract void run();
}